home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / INTRO5.S < prev    next >
Encoding:
Text File  |  1988-07-19  |  19.7 KB  |  1,059 lines

  1. ; **************************************
  2. ; * INTRO NUMBER 5 (C) 1990 CRYPTIC    *
  3. ; * CODED BY: TANGO                    *
  4. ; * MUSIC BY: COUNT                    *
  5. ; **************************************
  6.  
  7.     opt c-
  8.     section blitter,code_c            Chip Ram please !!
  9.     include    df1:definitions            Give me some hardware reggies
  10.     include    df1:macros                Give me some macros
  11.     
  12.         
  13. ;LOCAL CONSTANTS
  14.  
  15. icra        equ $bfed01                
  16. ;allocmem     =-30-168                
  17. ;freemem     =-30-180                
  18.  
  19.  
  20. TAKEOVER:
  21.  
  22.     Move.l    #Blank,D1
  23.     Move.w    D1,Blank1l+2
  24.     Move.w    D1,Blank2l+2
  25.     Move.w    D1,Blank3l+2
  26.     Swap    D1
  27.     Move.w    d1,Blank1h+2
  28.     Move.w    d1,Blank2h+2
  29.     Move.w    d1,Blank3h+2
  30.     
  31.     LEA custom,a5        
  32.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  33.     MOVEQ #0,D0                     Doesn't matter which version
  34.      MOVE.L 4.w,a6                 EXECBASE
  35.     jsr    -132(a6)                 task switching off (forbid)
  36.      JSR -$228(a6)                  Openlibrary
  37.      MOVE.L D0,GFXBASE             Store library address
  38.     jsr    cyb_init
  39.         
  40. ;Now put the graphic addresses in the CopperList         
  41.  
  42.      move.l    screenx,d1            Bitplane memory address
  43.     move.w    d1,bp1lo+2            for scroll 1.
  44.      swap    d1
  45.      move.w    d1,bp1hi+2
  46.  
  47.      move.l    screenx,d1            Bitplane memory address
  48.     ADD.L    #10000,D1
  49.     move.w    d1,bp3lo+2            for scroll 1.
  50.      swap    d1
  51.      move.w    d1,bp3hi+2
  52.  
  53.      move.l    screenx,d1            Bitplane memory address
  54.     ADD.L    #10000*2,D1
  55.     move.w    d1,bp5lo+2            for scroll 1.
  56.      swap    d1
  57.      move.w    d1,bp5hi+2
  58.  
  59.      move.l    screeny,d1            Bitplane memory address
  60.     move.w    d1,abp1lo+2            for scroll 2.
  61.      swap    d1
  62.      move.w    d1,abp1hi+2
  63.  
  64.     move.l    screeny,d1            Bitplane memory address
  65.     ADD.L    #10000,D1
  66.     move.w    d1,abp3lo+2            for scroll 2.
  67.      swap    d1
  68.      move.w    d1,abp3hi+2
  69.  
  70.     move.l    screeny,d1            Bitplane memory address
  71.     ADD.L    #10000*2,D1
  72.     move.w    d1,abp5lo+2            for scroll 2.
  73.      swap    d1
  74.      move.w    d1,abp5hi+2
  75.  
  76.  
  77. ; ** SET UP EVEN BITPLANES 2,4,6 **
  78.  
  79.     MOVE.L    #PLAY2+18*44-2,D1
  80.     MOVE.W    D1,BP2LO+2
  81.     SWAP    D1
  82.     MOVE.W    D1,BP2HI+2
  83.     
  84.     MOVE.L    #PLAY2+18*44-2,D1
  85.     ADD.L    #44*290,D1
  86.     MOVE.W    D1,BP4LO+2
  87.     SWAP    D1
  88.     MOVE.W    D1,BP4HI+2
  89.     
  90.     MOVE.L    #PLAY2+18*44-2,D1
  91.     ADD.L    #44*290*2,D1
  92.     MOVE.W    D1,BP6LO+2
  93.     SWAP    D1
  94.     MOVE.W    D1,BP6HI+2
  95.     
  96.      move.l GFXBASE,d0            Move gfxbase offset to d0
  97.      MOVE.L D0,A6                
  98.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  99.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  100.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  101.      MOVE.W #$8080,dmacon(a5)    Re-enable copper
  102.      MOVE.W #$8010,intena(a5)        
  103.      MOVE.L $6c,old                Save work bench interrupt
  104.      MOVE.L #LEV3,$6c            Point to were to set up interrupt
  105.     move.w    intenar(a5),systemints
  106.     move.b    #%01111111,icra        Kill keyboard.
  107.         
  108. WAIT:     
  109.     BTST #6,$BFE001                This waits for the left
  110.      BNE.S    WAIT                mouse button to be pressed
  111.     move.l    4.w,a6                EXECBASE
  112.      MOVE.L old,$6c                Restore system interrupts
  113.     MOVE.L GFXBASE,A6
  114.      MOVE.W #$80,dmacon(a5)        Disable DMA
  115.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  116.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  117.      move.w    systemints,d0        Systems interrupt
  118.      or.w    #$c000,d0
  119.      move.w    d0,intena(a5)        Enable OS interrupts
  120.      move.b    #%10011011,icra        Enable keyboard
  121.     clr.w    $dff0a8                Clear music
  122.     clr.w    $dff0b8
  123.     clr.w    $dff0c8
  124.     clr.w    $dff0d8
  125.     move.w    #$f,$dff096
  126.     rts
  127.  
  128.  
  129. ERROR:    
  130.     move.l 4.w,a6                Get EXECBASE
  131.     jsr    -138(a6)                Permit ( multi-tasking on )
  132.     moveq    #0,d0                Clear d0
  133.      RTS                            Return to AmigaDOS
  134.  
  135.  
  136. ;This is the NEW level 3 interrupt
  137.  
  138. LEV3:
  139.      Save_all                    Save all registers to the stack
  140.     lea    custom,a5
  141.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  142.     BNE out
  143.     move.w    #$8010,$9c            Cause Copper interrupt                                
  144.  
  145. ; ** Main Routines called every VBI **
  146.  
  147.     bsr    testscroll
  148.     bsr    testscroll2
  149.     bsr    bounce2
  150.     bsr    bounce
  151.     jsr    cyb_music
  152.             
  153. out:     
  154.     Return_all
  155.     DC.W $4ef9                    hex value for  JMP instruction
  156. old:     
  157.     DC.L 0                        will jump to normal interrupt
  158.  
  159.  
  160. ; ** THE SCROLL ROUTINE **
  161.  
  162. testscroll:
  163.     tst.l    stopper
  164.     beq.s    scroll
  165.     sub.l    #1,stopper
  166.     rts
  167. scroll:
  168.     cmp.l    #30,val                    Blitshifted all <<<
  169.     blo.s    coarse_scroll_it        No then get doing it !!
  170.     bsr        blit_char                Blit letter to screen
  171.     clr.l    val                        Reset index
  172. coarse_scroll_it:
  173.     bsr        coarse                    Scroll all line
  174.     rts                            
  175.  
  176. testscroll2:
  177.     tst.l    stopper2                Test for pause.
  178.     beq.s    scroll2
  179.     sub.l    #1,stopper2
  180.     rts
  181. scroll2:
  182.     cmp.l    #30,val2                Blitshifted all <<<
  183.     blo.s    coarse_scroll_it2        No then get doing it blitter man !!
  184.     bsr        blit_char2                Blit letter to screen
  185.     clr.l    val2                    Reset index
  186. coarse_scroll_it2:
  187.     bsr        coarse2                    Scroll all line
  188.     rts                            
  189.  
  190.     
  191. ; ** BLIT LETTER ON THE SCREEN **
  192.  
  193. blit_char
  194.     jsr        text
  195.     lea        custom,a5                Get custom chip address
  196.     move.l    screenx,a0                 The screen on which scrolly is.
  197.     move.l    #font,a1                 Put font in blitter source
  198.     add.l    d2,a1
  199.     MOVE.L    #2,D1
  200.     Sub.l    #4,A0
  201. blit_test:
  202.     btst    #14,$dff002                 Blitter busy !!!
  203.     bne    blit_test                     Lets wait till she finishes !
  204.     move.w    #$ffff,bltafwm(a5)        Mask 
  205.     move.w    #$ffff,bltalwm(a5)        Mask 
  206.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  207.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  208.     move.w    #36,bltamod(a5)             Modulo (20-1)*2
  209.     move.w    #44,bltdmod(a5)             Modulo (20-1)*2
  210.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  211.     clr.w    bltcon1(a5)                 Set Ascending mode
  212.      move.w    #34*64+2,bltsize(a5)     Blit size (SIZE OF FONT)
  213.     ADD.L    #10000,A0
  214.     ADD.L    #40*200,A1
  215.     DBF        D1,BLIT_TEST
  216.     rts                                  Return
  217.  
  218.  
  219. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  220. ;
  221. ;     FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
  222.  
  223. coarse:
  224.     lea        custom,a5                 
  225.     move.l    screenx,a0                
  226.     move.l    a0,a1
  227.     add.l    #2,a1
  228.     move.l    #2,d1
  229.     move    #12,d2                
  230.     incl    #4,val                    
  231.     ror        #4,d2                    ; Set to correct bits (12-15)
  232.     or.w    #$09f0,d2
  233. blit_wait:
  234.     btst    #14,$dff002            
  235.     bne        blit_wait
  236.     move.l    #-1,bltafwm(a5)
  237.     move.l    a1,bltapth(a5)
  238.     move.l    a0,bltdpth(a5)
  239.     move.w    #0,bltamod(a5)
  240.     move.w    #0,bltdmod(a5)
  241.     move.w    d2,bltcon0(a5)    
  242.     move.w    #34*64+20,bltsize(a5)
  243.     add.l    #10000,a0
  244.     add.l    #10000,a1
  245.     dbf        d1,blit_wait
  246.     rts    
  247.  
  248.  
  249.  
  250. ; ** SCROLL NUMBER TWO **
  251. ;
  252. ; DOCUMENTED IN SCROLL NUMBER ONE.
  253.  
  254. blit_char2:
  255.     jsr        text2
  256.     lea        custom,a5                
  257.     move.l    screeny,a0                 
  258.     move.l    #font,a1                 
  259.     add.l    d2,a1
  260.     MOVE.L    #2,D6
  261.     Sub.l    #4,A0
  262.  
  263. blit_test2:
  264.     btst    #14,$dff002                 
  265.     bne    blit_test2                     
  266.     move.w    #$ffff,bltafwm(a5)        
  267.     move.w    #$ffff,bltalwm(a5)        
  268.     move.l    a0,bltdpth(a5)             
  269.     move.l    a1,bltapth(a5)             
  270.     move.w    #36,bltamod(a5)             
  271.     move.w    #44,bltdmod(a5)             
  272.     move.w    #$9f0,bltcon0(a5)         
  273.     clr.w    bltcon1(a5)                 
  274.      move.w    #34*64+2,bltsize(a5)     
  275.     ADD.L    #10000,A0
  276.     ADD.L    #40*200,A1
  277.     DBF        D6,BLIT_TEST2
  278.     rts                                  
  279.  
  280. coarse2:
  281.     lea        custom,a5                 
  282.     move.l    screeny,a0                
  283.     move.l    a0,a1
  284.     add.l    #2,a1
  285.     move.l    #2,d4
  286.     incl    #4,val2                    
  287.     move    #12,d7                
  288.     ror        #4,d7                    
  289.     or        #%100111110000,d7        
  290. blit_wait2:
  291.     btst    #14,$dff002            
  292.     bne        blit_wait2
  293.     move.l    #-1,bltafwm(a5)
  294.     move.l    a1,bltapth(a5)
  295.     move.l    a0,bltdpth(a5)
  296.     move.w    #0,bltamod(a5)
  297.     move.w    #0,bltdmod(a5)
  298.     move.w    d7,bltcon0(a5)    
  299.     move.w    #34*64+20,bltsize(a5)
  300.     add.l    #10000,a0
  301.     add.l    #10000,a1
  302.     dbf        d4,blit_wait2
  303.     rts
  304.     
  305.  
  306.  
  307.  
  308. ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
  309. ;
  310. ;     ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
  311. ;             : DELTAY-WAIT COMMAND IN COPPERLIST.
  312. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  313.  
  314. bounce:
  315.     cmp.l    #66,ycord
  316.     beq.s    up
  317.     add.l    #1,ycord
  318.     sub.b    #1,deltay
  319.     rts
  320. up: cmp.l    #66,ycordminus
  321.     beq.s    rst_cord
  322.     add.l    #1,ycordminus
  323.     add.b    #1,deltay
  324.     rts
  325. rst_cord:
  326.     clr.l    ycord
  327.     clr.l    ycordminus
  328.     rts
  329.     
  330.     even
  331.  
  332.  
  333. ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
  334. ;
  335. ;     ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
  336. ;             : DELTAY2-WAIT COMMAND IN COPPERLIST.
  337. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  338.  
  339. bounce2:
  340.     cmp.l    #66,ycord2
  341.     beq.s    up2
  342.     add.l    #1,ycord2
  343.     add.b    #1,deltay2
  344.     rts
  345. up2:cmp.l    #66,ycordminus2
  346.     beq.s    rst_cord2
  347.     add.l    #1,ycordminus2
  348.     sub.b    #1,deltay2
  349.     rts
  350. rst_cord2:
  351.     clr.l    ycord2
  352.     clr.l    ycordminus2
  353.     rts
  354.     
  355.     even
  356.  
  357.  
  358. ; ** CHARACTER DECODER ROUTINE **
  359.  
  360. ;    CHARACTER BASE ADDRESS RETURNED IN D2
  361. ;     JUST ADD THIS TO YOUR FONT ADDREES.
  362.  
  363. text:
  364.     Clr.l    d1
  365.     move.l    acurent,a2
  366.     move.b    (A2),d1
  367.     cmp.b    #254,d1
  368.     beq.s    stop_scroll
  369.     Cmp.b    #255,d1
  370.     bne        over
  371.     Move.l    #Texter,a2
  372.     MOVE.L    #TEXTER,ACURENT
  373.     Move.b    (a2),d1
  374. Over
  375.     Add.l    #1,Acurent
  376.     Lea        Char,a1
  377.     Sub.l    #32,d1
  378.     Add.l    d1,d1
  379.     Clr.l    d2
  380.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  381.     Rts
  382. stop_scroll:
  383.     move.l    #5136,d2                ; Blank letter.
  384.     add.l    #1,acurent
  385.     move.l    #150,stopper
  386.     rts
  387.  
  388.  
  389. ; ** CHARACTER OFFSETS TO FONT **
  390.     even
  391. Char:
  392.     dc.w    5136,3864,0,0,0,0,0,5132,3868,3872,0,0
  393.     dc.w    5128,3876,5124,0,3860,2584,2588,2592,2596,3840
  394.     dc.w    3844,3848,3852,3856,0,0,0,0,0,5120,0
  395.     dc.w    0,4,8,12,16,20,24,28,32,36,1280,1284,1288,1292,1296
  396.     dc.w    1300,1304,1308,1312,1316,2560,2564,2568,2572,2576,2580
  397.     dc.w    0,0,0
  398.     even
  399.  
  400.  
  401. ; ** MESSAGE NUMBER ONE **
  402.  
  403. ; 254=STOP_SCROLL
  404. ; 255=WRAP AROUND
  405.  
  406. Acurent:
  407.     DC.L    Texter
  408. Texter:
  409.     DC.B    "    TANGO  ",254
  410.     DC.B    " HELLO RAY    THIS IS THE DUAL SCROLLER  AND I KNOW THERE'S SOMERT MISSING    THE STARS AND THE ROTATION BIT"
  411.     DC.B    " WHEN I'VE SUSSED IT OUT PROPERLY THEY WILL BE IN."
  412.     DC.B    "   I KNOW THAT THIS CODE IS LONG BUT ITS FULL OF BLANK SPACES SO IT WILL EASILY CRUNCH TO 70K"
  413.     DC.B    "  I NEEDED THE BLANK SCREENS SO AS TO NOT GET ANY CRAP AT THE TOPE AND BOTTOM OF THE SCREEN DUE TO THE FACT OF MOVING THE SCROLLERS UP AND DOWN"
  414.     DC.B    "  THE PICTURE IN THE BACKGROUND CAN BE 8 COLOURS AND THE SIZE IS IN OVERSCAN OR 352 X 290 BYTES"
  415.     DC.B    "   IS THE ENLARGING ON THE FONT OK ????     ASK KODAK IF HE HAS ANY ALGORITHMS ON STARFIELDS OR VECTORS     SEE YA SOON RAY        WRAP"
  416.     DC.B    255
  417.     even
  418.  
  419.  
  420. text2:
  421.     Clr.l    d1
  422.     move.l    acurent2,a2
  423.     move.b    (A2),d1
  424.     cmp.b    #254,d1
  425.     beq        pause_scroll
  426.     Cmp.b    #255,d1
  427.     bne        over2
  428.     Move.l    #Texter2,a2
  429.     MOVE.L    #TEXTER2,ACURENT2        ; RESET TO BEGINING OF MESSAGE.
  430.     Move.b    (a2),d1
  431. Over2:
  432.     Add.l    #1,Acurent2
  433.     Lea        Char,a1
  434.     Sub.l    #32,d1
  435.     Add.l    d1,d1
  436.     Clr.l    d2
  437.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  438.     rts
  439. pause_scroll:
  440.     move.l    #5136,d2
  441.     add.l    #1,acurent2
  442.     move.l    #150,stopper2
  443.     rts
  444.  
  445.  
  446. ; ** MESSAGE NUMBER TWO **
  447.     even
  448. Acurent2
  449.     Dc.l    Texter2
  450. Texter2:
  451.     DC.B    " THIS IS SCROLLER NUMBER 2 AND I CAN'T BE BOTHERED TO DO ANY SCROLLTEXT...            ",255
  452.     even
  453.  
  454.  
  455. ;                **********************************************
  456. ;                ** THE MUZAX PLAY ROUTINE FOR NOISE TRACKER ** 
  457. ;                  ******************************************
  458.  
  459.  
  460. MUZAX:
  461.  
  462.     jsr    CYB_init
  463.  
  464. end:    rts
  465. CYB_init:lea    CYB_data,a0
  466.     add.l    #$03b8,a0
  467.     moveq    #$7f,d0
  468.     moveq    #0,d1
  469. CYB_init1:
  470.     move.l    d1,d2
  471.     subq.w    #1,d0
  472. CYB_init2:
  473.     move.b    (a0)+,d1
  474.     cmp.b    d2,d1
  475.     bgt.s    CYB_init1
  476.     dbf    d0,CYB_init2
  477.     addq.b    #1,d2
  478. CYB_init3:
  479.     lea    CYB_data,a0
  480.     lea    CYB_sample1(pc),a1
  481.     asl.l    #8,d2
  482.     asl.l    #2,d2
  483.     add.l    #$438,d2
  484.     add.l    a0,d2
  485.     moveq    #$1e,d0
  486. CYB_init4:
  487.     move.l    d2,(a1)+
  488.     moveq    #0,d1
  489.     move.w    42(a0),d1
  490.     asl.l    #1,d1
  491.     add.l    d1,d2
  492.     add.l    #$1e,a0
  493.     dbf    d0,CYB_init4
  494.     lea    CYB_sample1(PC),a0
  495.     moveq    #0,d0
  496. CYB_clear:
  497.     move.l    (a0,d0.w),a1
  498.     clr.l    (a1)
  499.     addq.w    #4,d0
  500.     cmp.w    #$7c,d0
  501.     bne.s    CYB_clear
  502.     clr.w    $dff0a8
  503.     clr.w    $dff0b8
  504.     clr.w    $dff0c8
  505.     clr.w    $dff0d8
  506.     clr.l    CYB_partnrplay
  507.     clr.l    CYB_partnote
  508.     clr.l    CYB_partpoint
  509.     move.b    CYB_data+$3b6,CYB_maxpart+1
  510.     rts
  511.     rts
  512. CYB_music:
  513.     addq.w    #1,CYB_counter
  514. CYB_cool:cmp.w    #6,CYB_counter
  515.     bne.s    CYB_notsix
  516.     clr.w    CYB_counter
  517.     bra    CYB_rout2
  518. CYB_notsix:
  519.     lea    CYB_aud1temp(PC),a6
  520.     tst.b    3(a6)
  521.     beq.s    CYB_arp1
  522.     lea    $dff0a0,a5        
  523.     bsr.s    CYB_arprout
  524. CYB_arp1:lea    CYB_aud2temp(PC),a6
  525.     tst.b    3(a6)
  526.     beq.s    CYB_arp2
  527.     lea    $dff0b0,a5
  528.     bsr.s    CYB_arprout
  529. CYB_arp2:lea    CYB_aud3temp(PC),a6
  530.     tst.b    3(a6)
  531.     beq.s    CYB_arp3
  532.     lea    $dff0c0,a5
  533.     bsr.s    CYB_arprout
  534. CYB_arp3:lea    CYB_aud4temp(PC),a6
  535.     tst.b    3(a6)
  536.     beq.s    CYB_arp4
  537.     lea    $dff0d0,a5
  538.     bra.s    CYB_arprout
  539. CYB_arp4:    rts
  540. CYB_arprout:
  541.     move.b    2(a6),d0
  542.     and.b    #$0f,d0
  543.     tst.b    d0
  544.     beq    CYB_arpegrt
  545.     cmp.b    #$01,d0
  546.     beq.s    CYB_portup
  547.     cmp.b    #$02,d0
  548.     beq.s    CYB_portdwn
  549.     cmp.b    #$0a,d0
  550.     beq.s    CYB_volslide
  551.     rts
  552. CYB_portup:
  553.     moveq    #0,d0
  554.     move.b    3(a6),d0
  555.     sub.w    d0,22(a6)
  556.     cmp.w    #$71,22(a6)
  557.     bpl.s    CYB_ok1
  558.     move.w    #$71,22(a6)
  559. CYB_ok1:    move.w    22(a6),6(a5)
  560.     rts
  561. CYB_portdwn:
  562.     moveq    #0,d0
  563.     move.b    3(a6),d0
  564.     add.w    d0,22(a6)
  565.     cmp.w    #$538,22(a6)
  566.     bmi.s    CYB_ok2
  567.     move.w    #$538,22(a6)
  568. CYB_ok2:    move.w    22(a6),6(a5)
  569.     rts
  570. CYB_volslide:
  571.     moveq    #0,d0
  572.     move.b    3(a6),d0
  573.     lsr.b    #4,d0
  574.     tst.b    d0
  575.     beq.s    CYB_voldwn
  576.     add.w    d0,18(a6)
  577.     cmp.w    #64,18(a6)
  578.     bmi.s    CYB_ok3
  579.     move.w    #64,18(a6)
  580. CYB_ok3:    move.w    18(a6),8(a5)
  581.     rts
  582. CYB_voldwn:
  583.     moveq    #0,d0
  584.     move.b    3(a6),d0
  585.     and.b    #$0f,d0
  586.     sub.w    d0,18(a6)
  587.     bpl.s    CYB_ok4
  588.     clr.w    18(a6)
  589. CYB_ok4:    move.w    18(a6),8(a5)
  590.     rts
  591. CYB_arpegrt:
  592.     move.w    CYB_counter(PC),d0
  593.     cmp.w    #1,d0
  594.     beq.s    CYB_loop2
  595.     cmp.w    #2,d0
  596.     beq.s    CYB_loop3
  597.     cmp.w    #3,d0
  598.     beq.s    CYB_loop4
  599.     cmp.w    #4,d0
  600.     beq.s    CYB_loop2
  601.     cmp.w    #5,d0
  602.     beq.s    CYB_loop3
  603.     rts
  604. CYB_loop2:
  605.     moveq    #0,d0
  606.     move.b    3(a6),d0
  607.     lsr.b    #4,d0
  608.     bra.s    CYB_cont
  609. CYB_loop3:
  610.     moveq    #$00,d0
  611.     move.b    3(a6),d0
  612.     and.b    #$0f,d0
  613.     bra.s    CYB_cont
  614. CYB_loop4:
  615.     move.w    16(a6),d2
  616.     bra.s    CYB_endpart
  617. CYB_cont:
  618.     add.w    d0,d0
  619.     moveq    #0,d1
  620.     move.w    16(a6),d1
  621.     and.w    #$fff,d1
  622.     lea    CYB_arpeggio(PC),a0
  623. CYB_loop5:
  624.     move.w    (a0,d0),d2
  625.     cmp.w    (a0),d1
  626.     beq.s    CYB_endpart
  627.     addq.l    #2,a0
  628.     bra.s    CYB_loop5
  629. CYB_endpart:
  630.     move.w    d2,6(a5)
  631.     rts
  632. CYB_rout2:
  633.     lea    CYB_data,a0
  634.     move.l    a0,a3
  635.     add.l    #$0c,a3
  636.     move.l    a0,a2
  637.     add.l    #$3b8,a2
  638.     add.l    #$43c,a0
  639.     move.l    CYB_partnrplay(PC),d0
  640.     moveq    #0,d1
  641.     move.b    (a2,d0),d1
  642.     asl.l    #8,d1
  643.     asl.l    #2,d1
  644.     add.l    CYB_partnote(PC),d1
  645.     move.l    d1,CYB_partpoint
  646.     clr.w    CYB_dmacon
  647.     lea    $dff0a0,a5
  648.     lea    CYB_aud1temp(PC),a6
  649.     bsr    CYB_playit
  650.     lea    $dff0b0,a5
  651.     lea    CYB_aud2temp(PC),a6
  652.     bsr    CYB_playit
  653.     lea    $dff0c0,a5
  654.     lea    CYB_aud3temp(PC),a6
  655.     bsr    CYB_playit
  656.     lea    $dff0d0,a5
  657.     lea    CYB_aud4temp(PC),a6
  658.     bsr    CYB_playit
  659.     move.w    #$01f4,d0
  660. CYB_rls:    dbf    d0,CYB_rls
  661.     move.w    #$8000,d0
  662.     or.w    CYB_dmacon,d0
  663.     move.w    d0,$dff096
  664.     lea    CYB_aud4temp(PC),a6
  665.     cmp.w    #1,14(a6)
  666.     bne.s    CYB_voice3
  667.     move.l    10(a6),$dff0d0
  668.     move.w    #1,$dff0d4
  669. CYB_voice3:
  670.     
  671.     lea    CYB_aud3temp(PC),a6
  672.     cmp.w    #1,14(a6)
  673.     bne.s    CYB_voice2
  674.     move.w    #1,$dff0c4
  675. CYB_voice2:
  676.     
  677.     lea    CYB_aud2temp(PC),a6
  678.     cmp.w    #1,14(a6)
  679.     bne.s    CYB_voice1
  680.     move.l    10(a6),$dff0b0
  681.     move.w    #1,$dff0b4
  682. CYB_voice1:
  683.     lea    CYB_aud1temp(PC),a6
  684.     cmp.w    #1,14(a6)
  685.     bne.s    CYB_voice0
  686.     move.l    10(a6),$dff0a0
  687.     move.w    #1,$dff0a4
  688. CYB_voice0:
  689.     move.l    CYB_partnote(PC),d0
  690.     add.l    #$10,d0
  691.     move.l    d0,CYB_partnote
  692.     cmp.l    #$400,d0
  693.     bne.s    CYB_stop
  694. CYB_higher:
  695.     clr.l    CYB_partnote
  696.     addq.l    #1,CYB_partnrplay
  697.     moveq    #0,d0
  698.     move.w    CYB_maxpart(PC),d0
  699.     move.l    CYB_partnrplay(PC),d1
  700.     cmp.l    d0,d1
  701.     bne.s    CYB_stop
  702.     clr.l    CYB_partnrplay
  703.     ;st    Pflag
  704. CYB_stop:tst.w    CYB_status
  705.     beq.s    CYB_stop2
  706.     clr.w    CYB_status
  707.     bra.s    CYB_higher
  708. CYB_stop2:
  709.     rts
  710. CYB_playit:
  711.     
  712.     move.l    (a0,d1.l),(a6)
  713.     addq.l    #4,d1
  714.     moveq    #0,d2
  715.     move.b    2(a6),d2
  716.     and.b    #$f0,d2
  717.     lsr.b    #4,d2
  718.     move.b    (a6),d0
  719.     and.b    #$f0,d0
  720.     or.b    d0,d2
  721.     tst.b    d2
  722.     beq.s    CYB_nosamplechange
  723.     moveq    #0,d3
  724.     lea    CYB_samples(PC),a1
  725.     move.l    d2,d4
  726.     asl.l    #2,d2
  727.     mulu    #$1e,d4
  728.     move.l    (a1,d2),4(a6)
  729.     move.w    (a3,d4.l),8(a6)
  730.     move.w    2(a3,d4.l),18(a6)
  731.     move.w    4(a3,d4.l),d3
  732.     tst.w    d3
  733.     beq.s    CYB_displace
  734.     move.l    4(a6),d2
  735.     add.l    d3,d2
  736.     move.l    d2,4(a6)
  737.     move.l    d2,10(a6)
  738.     move.w    6(a3,d4.l),8(a6)
  739.     move.w    6(a3,d4.l),14(a6)
  740.     move.w    18(a6),8(a5)
  741.     bra.s    CYB_nosamplechange
  742. CYB_displace:
  743.     move.l    4(a6),d2
  744.     add.l    d3,d2
  745.     move.l    d2,10(a6)
  746.     move.w    6(a3,d4.l),14(a6)
  747.     move.w    18(a6),8(a5)
  748. CYB_nosamplechange:
  749.     move.w    (a6),d0
  750.     and.w    #$fff,d0
  751.     tst.w    d0
  752.     beq.s    CYB_retrout
  753.     move.w    (a6),16(a6)
  754.     move.w    20(a6),$dff096
  755.     move.l    4(a6),(a5)
  756.     move.w    8(a6),4(a5)
  757.     move.w    (a6),d0
  758.     and.w    #$fff,d0
  759.     move.w    d0,6(a5)
  760.     move.w    20(a6),d0
  761.     or.w    d0,CYB_dmacon
  762. CYB_retrout:
  763.     tst.w    (a6)
  764.     beq.s    CYB_nonewper
  765.     move.w    (a6),22(a6)
  766. CYB_nonewper:
  767.     move.b    2(a6),d0
  768.     and.b    #$0f,d0
  769.     cmp.b    #$0b,d0
  770.     beq.s    CYB_posjmp
  771.     cmp.b    #$0c,d0
  772.     beq.s    CYB_setvol
  773.     cmp.b    #$0d,d0
  774.     beq.s    CYB_break
  775.     cmp.b    #$0e,d0
  776.     beq.s    CYB_setfil
  777.     cmp.b    #$0f,d0
  778.     beq.s    CYB_setspeed
  779.     rts
  780. CYB_posjmp:
  781.     not.w    CYB_status
  782.     moveq    #0,d0
  783.     move.b    3(a6),d0
  784.     subq.b    #1,d0
  785.     move.l    d0,CYB_partnrplay
  786.     rts
  787. CYB_setvol:
  788.     move.b    3(a6),8(a5)
  789.     rts
  790. CYB_break:
  791.     not.w    CYB_status
  792.     rts
  793. CYB_setfil:
  794.     moveq    #0,d0
  795.     move.b    3(a6),d0
  796.     and.b    #1,d0
  797.     rol.b    #1,d0
  798.     and.b    #$fd,$bfe001
  799.     or.b    d0,$bfe001
  800.     rts
  801. CYB_setspeed:
  802.     move.b    3(a6),d0
  803.     and.b    #$0f,d0
  804.     beq.s    CYB_back
  805.     clr.w    CYB_counter
  806.     move.b    d0,CYB_cool+3
  807. CYB_back:    rts
  808. CYB_aud1temp:
  809.     dcb.w    10,0
  810.     dc.w    1
  811.     dcb.w    2,0
  812. CYB_aud2temp:
  813.     dcb.w    10,0
  814.     dc.w    2
  815.     dcb.w    2,0
  816. CYB_aud3temp:
  817.     dcb.w    10,0
  818.     dc.w    4
  819.     dcb.w    2,0
  820. CYB_aud4temp:
  821.     dcb.w    10,0
  822.     dc.w    8
  823.     dcb.w    2,0
  824. CYB_partnote:    dc.l    0
  825. CYB_partnrplay:    dc.l    0
  826. CYB_counter:    dc.w    0
  827. CYB_partpoint:    dc.l    0
  828. CYB_samples:    dc.l    0
  829. CYB_sample1:    dcb.l    31,0
  830. CYB_maxpart:    dc.w    0
  831. CYB_dmacon:    dc.w    0
  832. CYB_status:    dc.w    0
  833. CYB_arpeggio:
  834.     dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
  835.     dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
  836.     dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
  837.     dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
  838.     dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000
  839.  
  840.  
  841.             
  842.  
  843. ; ** THE COPPERLIST **
  844. OURCOPPER:
  845. Blank1L    dc.w    bpl1ptl,$0000
  846. Blank1H    dc.w    bpl1pth,$0000
  847. Blank2L    dc.w    bpl3ptl,$0000
  848. Blank2H    dc.w    bpl3pth,$0000
  849. Blank3L    dc.w    bpl5ptl,$0000
  850. Blank3H    dc.w    bpl5pth,$0000
  851.         dc.w    $120,0
  852.         dc.w    $122,0
  853.         dc.w    bpl1mod,4,bpl2mod,0
  854.         dc.w    diwstrt,$2c81-32,diwstop,$2cc1+32
  855.         dc.w    bplcon0,$6600,bplcon1,$0000
  856.         dc.w    ddfstrt,$28,ddfstop,$d0
  857.         dc.w    color01,$000
  858.         dc.w    color08,$F00,color09,$ff0,color10,$ee0,color11,$dd0
  859.         dc.w    color12,$de0,color13,$dc0,color14,$db0,color15,$da0
  860. bp2lo:    dc.w    bpl2ptl,$0000
  861. bp2hi:    dc.w    bpl2pth,$0000
  862. bp4lo:    dc.w    bpl4ptl,$0000
  863. bp4hi:    dc.w    bpl4pth,$0000
  864. bp6lo:    dc.w    bpl6ptl,$0000
  865. bp6hi:    dc.w    bpl6pth,$0000
  866. deltay2:wait    $3909,$fffe
  867. bp1lo:    dc.w    bpl1ptl,$0000
  868. bp1hi:    dc.w    bpl1pth,$0000
  869. bp3lo:    dc.w    bpl3ptl,$0000
  870. bp3hi:    dc.w    bpl3pth,$0000
  871. bp5lo:    dc.w    bpl5ptl,$0000
  872. bp5hi:    dc.w    bpl5pth,$0000
  873.          DC.W    color01,$eee
  874.          Dc.w    color02,$dde
  875.         DC.W    color03,$bbd
  876.         DC.W    color04,$aac
  877.         DC.W    color05,$88c
  878.         DC.W    color06,$77b
  879.         DC.W    color07,$65a
  880.         dc.w    color01,$eee
  881.         wait    $5109,$fffe
  882.         dc.w    bpl1mod,-44
  883.         wait    $5209,$fffe
  884.         dc.w    bpl1mod,4
  885.         wait    $5309,$fffe
  886.         dc.w    bpl1mod,-44
  887.         wait    $5409,$fffe
  888.         dc.w    bpl1mod,4
  889.         wait    $5509,$fffe
  890.         dc.w    bpl1mod,-44
  891.         wait    $5609,$fffe
  892.         dc.w    bpl1mod,4
  893.         wait    $5709,$fffe
  894.         dc.w    bpl1mod,-44
  895.         wait    $5809,$fffe
  896.         dc.w    bpl1mod,4
  897.         wait    $5909,$fffe
  898.         dc.w    bpl1mod,-44
  899.         wait    $5a09,$fffe
  900.         dc.w    bpl1mod,4
  901.         wait    $5b09,$fffe
  902.         dc.w    bpl1mod,-44
  903.         wait    $5c09,$fffe
  904.         dc.w    bpl1mod,4
  905.         wait    $5d09,$fffe
  906.         dc.w    bpl1mod,-44
  907.         wait    $5e09,$fffe
  908.         dc.w    bpl1mod,4
  909.         wait    $5f09,$fffe
  910.         dc.w    bpl1mod,-44
  911.         wait    $6009,$fffe
  912.         dc.w    bpl1mod,4
  913.         wait    $6109,$fffe
  914.         dc.w    bpl1mod,-44
  915.         wait    $6209,$fffe
  916.         dc.w    bpl1mod,4
  917.         wait    $6309,$fffe
  918.         dc.w    bpl1mod,-44
  919.         wait    $6409,$fffe
  920.         dc.w    bpl1mod,4
  921.         wait    $6509,$fffe
  922.         dc.w    bpl1mod,-44
  923.         wait    $6609,$fffe
  924.         dc.w    bpl1mod,4
  925.         wait    $6709,$fffe
  926.         dc.w    bpl1mod,-44
  927.         wait    $6809,$fffe
  928.         dc.w    bpl1mod,4
  929.         wait    $6909,$fffe
  930.         dc.w    bpl1mod,-44
  931.         wait    $6a09,$fffe
  932.         dc.w    bpl1mod,4
  933.         wait    $6b09,$fffe
  934.         dc.w    bpl1mod,-44
  935.         wait    $6c09,$fffe
  936.         dc.w    bpl1mod,4
  937.         wait    $6d09,$fffe
  938.         dc.w    bpl1mod,-44
  939.         wait    $6e09,$fffe
  940.         dc.w    bpl1mod,4
  941.         wait    $6f09,$fffe
  942.         dc.w    bpl1mod,-44
  943.         wait    $7009,$fffe
  944.         dc.w    bpl1mod,4
  945.         wait    $7109,$fffe
  946.         dc.w    bpl1mod,-44
  947.         wait    $7209,$fffe
  948.         dc.w    bpl1mod,4
  949.         wait    $7309,$fffe
  950.         dc.w    bpl1mod,-44
  951.         wait    $7409,$fffe
  952.         dc.w    bpl1mod,4
  953.         wait    $7509,$fffe
  954.         dc.w    bpl1mod,-44
  955.         wait    $7609,$fffe
  956.         dc.w    bpl1mod,4
  957.         wait    $7709,$fffe
  958.         dc.w    bpl1mod,-44
  959.         wait    $7809,$fffe
  960.         dc.w    bpl1mod,4
  961.         wait    $7909,$fffe
  962.         dc.w    bpl1mod,-44
  963.         wait    $7a09,$fffe
  964.         dc.w    bpl1mod,4
  965.         wait    $7b09,$fffe
  966.         dc.w    bpl1mod,-44
  967.         wait    $7c09,$fffe
  968.         dc.w    bpl1mod,4
  969.         wait    $7d09,$fffe
  970.         dc.w    bpl1mod,-44
  971.         wait    $7e09,$fffe
  972.         dc.w    bpl1mod,4
  973.         wait    $7f09,$fffe
  974.         dc.w    bpl1mod,-44
  975.         wait    $8009,$fffe
  976.         dc.w    bpl1mod,4
  977.  
  978. deltay:    wait    $da09,$fffe
  979. abp1lo:    dc.w    bpl1ptl,$0000
  980. abp1hi:    dc.w    bpl1pth,$0000
  981. abp3lo:    dc.w    bpl3ptl,$0000
  982. abp3hi:    dc.w    bpl3pth,$0000
  983. abp5lo:    dc.w    bpl5ptl,$0000
  984. abp5hi:    dc.w    bpl5pth,$0000
  985.  
  986.         DC.W    color01,$F11
  987.          Dc.w    color02,$F22
  988.         DC.W    color03,$F33
  989.         DC.W    color04,$F44
  990.         DC.W    color05,$F55
  991.         DC.W    color06,$F66
  992.         DC.W    color07,$F77
  993.         end_copper
  994.         
  995.  
  996. ;LOCAL CONSTANTS
  997.  
  998. WBCOPPER:        DC.L    0
  999. GFXLIB:            DC.B     "graphics.library",0
  1000. GFXBASE:        DC.L    0
  1001. systemints:        dc.l    0
  1002. scroll_offset:    dc.l    0
  1003. screenx:        dc.l    picture
  1004. screeny:        dc.l    picture2
  1005. letter:            dc.b    0
  1006. letter2:        dc.b    0
  1007. val:            dc.l    0
  1008. val2:            dc.l    0
  1009. stopper:        dc.l    0
  1010. stopper2:        dc.l    0
  1011. speed:            dc.w    12
  1012. ycord:            dc.l    0
  1013. ycordminus:        dc.l    0
  1014. ycord2:            dc.l    0
  1015. ycordminus2:    dc.l    0
  1016. XPOS:            DC.L    300
  1017. YPOS:            DC.L    200
  1018. Blank            Dcb.b    4000,0
  1019.  
  1020.  
  1021. ;BINARY FILES TO BE INCLUDED
  1022.     EVEN
  1023. FONTSPACE:
  1024. font:    
  1025.     incbin    df1:METALCHARS
  1026. picture2    
  1027.     dcb.b    10000*3,0
  1028. picture:
  1029.     dcb.b    10000*3,0
  1030. PLAY2:
  1031.     INCBIN    DF1:PIC.IFF2
  1032. cyb_data:
  1033.     incbin    df1:mod.count 
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.     
  1042.     
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.     
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.